<%-- 
    Document   : fileupload
    Created on : 2012. 4. 16, 오후 3:46:53
    Author     : jeong
--%>

<%@page import="java.io.File"%>
<%@page import="org.apache.commons.fileupload.*"%>
<%@page import="org.apache.commons.fileupload.disk.*"%>
<%@page import="org.apache.commons.fileupload.servlet.*"%>
<%@page import="java.util.*"%>
<%@page contentType="text/html" pageEncoding="UTF-8"%>

<%
    
    // http://blog.naver.com/k201113/40150990305

    request.setCharacterEncoding("UTF-8");
    // 파일 저장 위치 설정.
    String contextRoot = getServletContext().getRealPath("/upload/");
   
    //String tempDir = contextRoot + "/temps" +"<br>";
    
    /**
        FileUpload 와 DiskFileUpload 클래스는 depricated 로 나와있어 톰캣에서 추천하는
        ServletFileUpload 와 DiskFileItemFactory 이 두클래스를 사용
    **/
    int sizeMax=1024*1024;
    if( ServletFileUpload.isMultipartContent(request) && request.getContentLength()<=sizeMax ){  
        
        DiskFileItemFactory factory=new DiskFileItemFactory();
        ServletFileUpload upload=new ServletFileUpload(factory);
  
        factory.setRepository(new File(contextRoot));    // 파일사이즈가 클경우 임시저장위치 지정(편의상
                                                         // 저장할위치와 똑같이 지정함)
        factory.setSizeThreshold(1024*100);              // 100kb 까지는 메모리에 저장
        upload.setSizeMax(sizeMax);                      // 1MB
        
        try{
            
            List files=upload.parseRequest(request);  
            Iterator<FileItem> iter=(files==null?null:files.iterator());
            
                while(iter!=null&& iter.hasNext()){
                    FileItem file=iter.next();
                    String param=file.getFieldName();
                    
                    if(file.isFormField()){
                        out.println(">>> file.isFormField() is true");
                        out.println("param:"+param+"-value:"+file.getString("UTF-8")+"<br>"); 
                        out.println(">>> ");
                                               
                    }else if(param.equals("upload")){
                        
                        String fileFullName=file.getName();
                        out.println("param:"+param+"-filename:"+fileFullName+"<br>");
                        out.println("getFile & writeFile!");
                        
                        if(file.getSize()>0){
                            // 파일이름만 뽑아낸다
                            int index=fileFullName.lastIndexOf("\\");
                            if(index==-1) index=fileFullName.lastIndexOf("/");
                            String filename=file.getName().substring(index+1);
                            // 파일 저장.
                            File saveFile=new File(contextRoot,filename);
                                // 디렉토리 체크.
                                if(!saveFile.exists()) {
                                    saveFile.mkdirs();
                                }
                            
                                out.println("<h1>"+saveFile.getAbsolutePath()+"</h1>");
                                file.write(saveFile);
                        }
                    }
            }
        }catch(Exception e){
            out.println(e.getMessage());
        }
 }

%> 

